package com.xlh.lock;

import java.util.concurrent.TimeUnit;

/**
 * 互斥Key锁
 *
 * @author cheer
 */
public interface KeyLock<K> {

    /**
     * 阻塞获取锁
     *
     * @param key
     */
    void lock(K key);

    /**
     * 非阻塞获取锁，获取不到立即返回
     *
     * @param key
     * @return
     */
    boolean tryLock(K key);

    /**
     * key是否被锁住
     *
     * @param key
     * @return
     */
    boolean isLocked(K key);

    /**
     * 带超时时间的非阻塞获取锁
     *
     * @param key
     * @param timeout
     * @param timeUnit
     * @return
     */
    boolean tryLock(K key, long timeout, TimeUnit timeUnit);

    /**
     * 解锁
     *
     * @param key
     */
    void unlock(K key);

    /**
     * 移除锁
     *
     * @param key
     */
    void removeLock(K key);

}
